Computer systems and related technology affect many aspects of society. Indeed, the computer system's ability to process information has transformed the way we live and work. Computer systems now commonly perform a host of tasks (e.g., word processing, scheduling, accounting, etc.) that prior to the advent of the computer system were performed manually. More recently, computer systems have been coupled to one another and to other electronic devices to form both wired and wireless computer networks over which the computer systems and other electronic devices can transfer electronic data.
A computing system is now capable of running hundreds of programs. For instance, a process is an example of a program. Nevertheless, processing capability remains fixed on a computing system. In order to allow for orderly processing of the various programs running on a computing system, a scheduler allocates time for each program. However, the smallest set of instructions that is seen by a scheduler is often referred to as a “thread”. Threads are often implemented within the context of a larger processing unit, such as a process, component, or program.
When a processing unit generates an event that is to be logged by a thread, the thread calls a logging component. Conventionally, logging an event can take quite a long time in relative computing terms—perhaps in the millisecond and hundreds of microseconds range. During this time, the thread has conventionally either been left idle, or placed in sleep mode so as to consume fewer computing resources. Either way, the thread that called into the logging component often cannot resume performing for the processing unit until the call is returned.
The subject matter claimed herein is not limited to embodiments that solve any disadvantages or that operate only in environments such as those described above. Rather, this background is only provided to illustrate one exemplary technology area where some embodiments described herein may be practiced.